package com.huashi.dealer.modular.business.user.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.huashi.dealer.commonEntity.StoreUser;
import com.huashi.dealer.commonEntity.User;
import com.huashi.dealer.modular.business.user.param.*;
import com.huashi.dealer.modular.business.user.vo.StatementAccountVo;
import com.huashi.dealer.modular.business.user.vo.StoreUserLoginVo;
import com.huashi.dealer.modular.business.user.vo.StoreUserListItemVo;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.huashi.dealer.modular.business.user.param.StoreUserListRequest;
import com.huashi.dealer.modular.business.user.param.StoreUserSaveRequest;

import java.util.List;

/**
 * API用户Service接口
 *
 * @author 谭陈强
 * @since 2025-07-30
 */
public interface UserService extends IService<User> {

    /**
     * 账号密码登录
     *
     * @param requestParam 请求参数
     * @return 登录结果
     */
    UserInfo accountLogin(UserRequestParam requestParam);

    /**
     * 用户自动登录
     *
     * @param requestParam 请求参数
     * @return 登录结果
     */
    UserResponseParam login(UserRequestParam requestParam);

    /**
     * 获取用户详情
     *
     * @param token 用户令牌
     * @return 用户详情
     */
    UserInfo getUserDetail(String token);

    /**
     * 编辑用户信息
     *
     * @param requestParam 请求参数
     */
    void editUserInfo(User requestParam);

    /**
     * 生成验证码
     *
     * @return 验证码信息
     */
    UserResponseParam generateCode();

    /**
     * 业务员登录
     *
     * @param requestParam 请求参数
     * @return 登录结果
     */
    StoreUser storeUserLogin(UserRequestParam requestParam);

    /**
     * 获取业务员详情
     *
     * @return 业务员详情
     */
    StoreUserVo getStoreUserDetail();

    /**
     * 获取客户列表
     *
     * @return 客户列表
     */
    CustomInfoResponseParam getCustomList(Page<User> page);

    /**
     * 余额申请
     *
     */
    void balanceApply(String money, String images);

    /**
     * 获取对账单
     *
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 对账单
     */
    StatementAccountVo getStatementAccount(String startDate, String endDate);
    /**
     * 初始化satoken
     */
    void initializeSaToken();

    /**
     * Store用户登录
     *
     * @param requestParam 登录请求参数
     * @return 登录结果
     */
    StoreUserLoginVo storeLogin(UserRequestParam requestParam);

    // 门店后台-管理员用户分页列表（新方法名避免重名）
    Page<StoreUserListItemVo> getStoreAdminUserPage(StoreUserListRequest request, Page<StoreUserListItemVo> page,String userName);

    // 新增管理员（新方法名）
    void createStoreAdminUser(StoreUserSaveRequest request);

    // 编辑管理员（新方法名）
    void updateStoreAdminUser(StoreUserSaveRequest request);

    // 删除管理员（新方法名，软删）
    void deleteStoreAdminUser(Long storeUserId);

    /**
     * 获取角色列表
     * @param roleName 角色名称（模糊查询）
     * @return 角色列表
     */
    List<RoleListItemVo> getRoleList(String roleName);

    /**
     * 获取业务员主管列表
     * @return 业务员主管列表
     */
    List<ManagerListItemVo> getManagerList();

    String alterTable(int type);

    /**
     * 获取用户默认地址
     *
     * @param userId 用户ID
     * @return 默认地址信息
     */
    UserAddressVo getDefaultAddress(Long userId);

    StoreDetail getStoreUserDetailById(Long storeId);

    void updateStoreUser(StoreUser user);
}